using System;
using System.Collections.Generic;
using System.Linq;
using App.Modelo.Interfaces;

namespace App.Modelo
{
    public class Usuario : IObjetoDominio, Interfaces.IUsuario, ITecnico, IBorradoLogico 
    {
        public virtual Int32 Id { get; set; }
        public virtual String Login { get; set; }
        public virtual String Clave { get; set; }
        public virtual String Nombre { get; set; }
        public virtual String Apellido { get; set; }
        public virtual String DNI { get; set; }
//        public virtual Grupo Grupo { get; set; }
        private IList<Grupo> _grupos;

        public virtual IList<Grupo> Grupos
        {
            get { 
                if (_grupos == null) 
                    _grupos = new List<Grupo>();
                return _grupos;
            }
            set { _grupos = value; }

        }

        public virtual string NombreGrupo {
            get { return String.Join(", ", Grupos.Select(g => g.Nombre).ToArray<String>()); }
        }

        public virtual DateTime FechaCreacion { get; set; }
        public virtual String Email { get; set; }

        private DateTime? _fechaUltimoLogin;

        public Usuario() { }

        /**
         * <summary>
         * get/set La cultura del usuario en la forma iso: ejemplo "es-AR"
         * </summary>
         */
        public virtual ICultura Cultura { get; set; }

        /**
         * <summary>
         * Retorna el nombre que se visualizara en los listados
         * </sumery>
         */
        public virtual String NombreVisible
        {
            get { return this.Nombre + " " + this.Apellido; }
        }


        public virtual DateTime FechaUltimoLogin
        {
            get { return _fechaUltimoLogin.HasValue ? _fechaUltimoLogin.Value : FechaCreacion; }
            set { _fechaUltimoLogin = value; }
        }


        public override string ToString()
        {
            return this.Login;
        }

        public override bool Equals(object obj)
        {
            if (obj is IUsuario && Id != default(Int32))
                return ((IUsuario) obj).Id == Id;
            return base.Equals(obj);
        }

        public virtual DateTime? FechaBaja { get; set; }
    }
}

